//一个数组中只有两个数字是出现一次，其他所有数字都出现了两次。
//编写一个函数找出这两个只出现一次的数字。
//int *Findnumbs(int* nums, int numsSize)
//{
//	int* ans = (int*)malloc(sizeof(int) * 2);
//
//	//得到异或的结果
//	int tmp = 0;
//	for (int i = 0; i < numsSize; i++)
//	{
//		//俩数相同，异或为0
//		tmp ^= nums[i];
//	}
//	//找到俩个数第一个不同的二进制位
//	int pos = 0;
//	for (int i = 0; i < 32; i++)
//	{
//		if ((tmp & 1) == 1)
//		{
//			pos = i;
//		}
//		tmp = tmp >> 1;
//	}
//	//按这个标准，将数组分为俩组，相同的数比在同一个数组
//	//int arr1[10] = { 0 };
//	//int arr2[10] = { 0 };
//	//int index1 = 0;
//	//int index2 = 0;
//
//	//改进，不放在数组，直接异或
//	int ans1 = 0;
//	int ans2 = 0;
//	for (int i = 0; i < numsSize; i++)
//	{
//		if (((nums[i] >> pos)&1) == 1)
//		{
//			ans1 =ans1^ nums[i];
//		}
//		else
//		{
//			ans2 =ans2^ nums[i];
//		}
//	}
//	ans[0] = ans1;
//	ans[1] = ans2;
//	return ans;
//
//}
//int main()
//{
//	int arr[] = { 1,1,2,2,3,3,4,4,5,6,7,7,8,8 };
//	int* p = NULL;
//	p=Findnumbs(arr, sizeof(arr) / sizeof(int));
//	for (int i = 0; i < 2; i++)
//	{
//		printf("%d ", p[i]);
//	}
//
//	return 0;
//}

//模拟实现strncpy
//char* my_strncpy(char* des, char* sour, size_t count)
//{
//	assert(des && sour);
//	char* head = des;
//	while (count--)
//	{
//		*des++ = *sour++;
//	}
//	*des = '\0';
//	return head;
//}
//int main()
//{
//	char str1[] = "abcdef";
//	char str2[20];
//	my_strncpy(str2, str1, 4);
//	printf("%s\n", str2);
//	return 0;
//}

//模拟实现strncat
//char* my_strncat(char* des, char* sour, size_t count)
//{
//	assert(des && sour);
//	char* head = des;
//	while (*sour != '\0'&&count)
//	{
//		while (*des != '\0')
//		{
//			des++;
//		}
//		while (count&&sour!='\0')
//		{
//			*des++ = *sour++;
//			count--;
//		}
//	}
//	des = '\0';
//	return head;
//}
//
//int main()
//{
//	char str1[] = "abcdef";
//	char str2[20] = "bite";
//	my_strncat(str2, str1, 4);
//	printf("%s\n", str2);
//	return 0;
//}

//atoi模拟实现
int my_atoi(const char* str)
{
	assert(str);
	int sum = 0;
	int flag = 1;//默认是正数

	while (*str == ' ')//跳过所有的空格
	{
		str++;
	}
	//判断正负号
	if (*str == '+')
	{
		str++;
	}
	else if (*str == '-')
	{
		str++;
		flag = -1;
	}
	else if(*str > '9' || *str < '0')
	{
		return 2147483647; //返回异常值
	}
	while ('0' < *str && '9' > *str)
	{
		sum = sum * 10 + *str - '0';
		str++;
	}
	return sum*flag;

}
int main()
{
	char str1[] = "-123456";
	int num=my_atoi(str1);
	printf("%d\n", num);
	return 0;
}